<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS 错误</title>
    <script>
        var txt = "";
        function message() {
            try{
                addalert("Welcome guest!")
            }catch(err){
                txt="There was an error on this page.\n\n";
                txt+="Error description: " + err.message + "\n\n";
                txt+="Click OK to continue.\n\n";
                alert(txt);
            }
        }

        /*
        *
        * 相对于 W3C 原来的我们做了优化 优化的地方是 正确的时候也应当显示出来 不然一直显示错误
        * 也就是 没有其他的情形 try throw catch 这样我们对于不同的情形
        * */
        function myFunction() {
            try {
                var x = document.getElementById("demo").value;
                if (x=="") {
                    throw  "empty";
                }else if (isNaN(x)) {
                    throw "not a number"
                } else if(x>10)    {
                    throw "too high";
                } else if(x<5)     {
                    throw "too low";  /* 这个 信息 throw 出去了 */
                }else{
                    throw "correct"
                }

            }catch (err){

                var y=document.getElementById("mess");
                if(err == "correct"){
                    y.innerHTML="符合格式需求"
                }else {
                    y.innerHTML="Error: " + err + ".";
                }

            }
        }
    </script>
</head>
<body>
    <!--
    Js 中的try catch 和 Java中的类似
    JavaScript 测试和捕捉
    try 语句允许我们定义在执行时进行错误测试的代码块。
    catch 语句允许我们定义当 try 代码块发生错误时，所执行的代码块。
    JavaScript 语句 try 和 catch 是成对出现的。
    -->
    <input type="button" value="View message" onclick="message()">

    <!--
        Throw 语句
        throw 语句允许我们创建自定义错误。
        正确的技术术语是：创建或抛出异常（exception）。
        如果把 throw 与 try 和 catch 一起使用，那么您能够控制程序流，
        并生成自定义的错误消息。
    -->
    <h1>My First JavaScript</h1>
    <p>Please input a number between 5 and 10:</p>
    <input id="demo" type="text">
    <button type="button" onclick="myFunction()">Test Input</button>
    <p id="mess"></p>
    <!-- 我们发现throw 之后要回归正常很难  -->
</body>
</html>